package cl.mt.mvc.helper;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;

import cl.mt.data.DataEmpresa;
import cl.mt.data.DataPais;
import cl.mt.data.DataPostulacion;
import cl.mt.data.DataUsuario;
import cl.mt.data.DataVehiculo;
import cl.mt.dto.DTOEmpresa;
import cl.mt.dto.DTOPostulacion;
import cl.mt.dto.DTOUsuario;
import cl.mt.dto.DTOVehiculo;
import cl.mt.dto.DTOVehiculosDisponible;
import cl.mt.dto.filtros.FiltroCargaDTO;
import cl.mt.dto.filtros.PaisRegioCiudadDTO;
import cl.mt.proxy.ProxyTipoMoneda;
import cl.mt.proxy.ProxyTipoRemolque;
import cl.mt.proxy.ProxyTipoUnidad;
import cl.mt.proxy.ProxyTipoVehiculo;

public class VehiculosHelper {
	
	private Logger log = LogManager.getLogger(VehiculosHelper.class.getName());
	
	
	public Collection getVehiculosDisponibles() {
		DataVehiculo dao = new DataVehiculo();
		
		Collection col = dao.getVehiculosDisponibles();
		List<DTOVehiculosDisponible> list= new ArrayList<DTOVehiculosDisponible>();
		log.debug("cantidad de Vehiculos Disponibles["+col.size()+"]");
		for (Iterator it=col.iterator(); it.hasNext(); ) {
			DTOVehiculosDisponible dto = (DTOVehiculosDisponible) it.next();
			
			dto.setUnidad(ProxyTipoUnidad.getInstance().getById(dto.getUnidad().getId()));
			dto.setMoneda(ProxyTipoMoneda.getInstance().getById(dto.getMoneda().getId()));
			dto.setRemolque(ProxyTipoRemolque.getInstance().getById(dto.getRemolque().getId()));	
			dto.setOrigen(getPaisRegionFiltro(dto.getOrigen().getIdCiudad()));
			dto.setDestino(getPaisRegionFiltro(dto.getDestino().getIdCiudad()));
			
			list.add(dto);
		}
		return list;
	}

	
	
	public Collection<DTOVehiculosDisponible> getVehiculosDisponiblesFiltro(FiltroCargaDTO filtro){
		DataVehiculo dao = new DataVehiculo();
		
		Collection col = dao.getVehiculosDisponiblesFiltro(filtro);
		List<DTOVehiculosDisponible> list= new ArrayList<DTOVehiculosDisponible>();
		log.debug("cantidad de Vehiculos Disponibles["+col.size()+"]");
		for (Iterator it=col.iterator(); it.hasNext(); ) {
			DTOVehiculosDisponible dto = (DTOVehiculosDisponible) it.next();
			
			dto.setUnidad(ProxyTipoUnidad.getInstance().getById(dto.getUnidad().getId()));
			dto.setMoneda(ProxyTipoMoneda.getInstance().getById(dto.getMoneda().getId()));
			dto.setRemolque(ProxyTipoRemolque.getInstance().getById(dto.getRemolque().getId()));	
			dto.setOrigen(getPaisRegionFiltro(dto.getOrigen().getIdCiudad()));
			dto.setDestino(getPaisRegionFiltro(dto.getDestino().getIdCiudad()));
			
			list.add(dto);
		}
		return list;
	}
	
	
	
	 public DTOPostulacion getInfoVehiculoPostulacion(String idOc) {
			log.debug("Buscando Postulaciones de Oferta Carga[" + idOc + "]");

			DataPostulacion dataPostulacion = new DataPostulacion();
			DataUsuario datUser= new DataUsuario();
			DataEmpresa dataEmpr = new DataEmpresa();
			DTOPostulacion dto = dataPostulacion.findByPrimaryKey(new Integer(idOc));
			DTOUsuario userPost = datUser.findByPrimaryKey(dto.getIdUsuario().longValue());
			DTOEmpresa emp = dataEmpr.findByPrimaryKey(new Long(userPost.getIdEmpresa()));
			dto.setUserPostulacion(userPost);
			emp.setCiudad(getPaisRegionFiltro(emp.getIdCiudad()));
			dto.setEmpresa(emp);
			dto.setVehiculo(getVehiculo(dto.getIdVehiculo()));
			return dto;

		}
	 
	 
	 
	 
	 
	 
		public DTOVehiculo getVehiculo(Integer idVehiculo) {
			log.debug("Buscando Vehiculo [" + idVehiculo + "]");

			DataVehiculo dataVehiculo = new DataVehiculo();
			DTOVehiculo dto = dataVehiculo.findByPrimaryKey(idVehiculo);
			ProxyTipoUnidad proxyTipoUnidad = ProxyTipoUnidad.getInstance();
			ProxyTipoVehiculo proxyTipoVehiculo = ProxyTipoVehiculo.getInstance();
			dto.setTipoVehiculo(proxyTipoVehiculo.getById(dto.getIdTipoVehiculo()));
			dto.setTipoUnidad(proxyTipoUnidad.getById(dto.getIdTipoUnidad()));
			return dto;

		}
	 
	 
	private PaisRegioCiudadDTO getPaisRegionFiltro (int idCiudad){
		DataPais daoPais= new DataPais();
		
		return daoPais.findFindCiudadFiltro(idCiudad);
	}



	public DTOPostulacion getInfoVehiculoDisponible(String idvd, String idUserContaccto) {

		DataUsuario datUser= new DataUsuario();
		DataEmpresa dataEmpr = new DataEmpresa();
		DTOPostulacion dto = new DTOPostulacion();
		DTOUsuario user = datUser.findByPrimaryKey(new Long(idUserContaccto));
		DTOEmpresa emp = dataEmpr.findByPrimaryKey(new Long(user.getIdEmpresa()));
		
		dto.setUserPostulacion(user);
		emp.setCiudad(getPaisRegionFiltro(emp.getIdCiudad()));
		dto.setEmpresa(emp);
		dto.setVehiculo(getVehiculo(new Integer(idvd)));
		return dto;
	}

	
}
